﻿Imports System.Data.OleDb

Namespace GLP.Abms

    Public Class Lista
        Inherits Abm

#Region "Constructor"

        ''' <summary>
        ''' Esta clase se encarga de la administración de los reportes o consultas contempladas por la aplicación.
        ''' </summary>
        ''' Constructor
        Sub New()
            MyBase.New(Operador, Password, "XRLista", "App_lista")
            MyBase.lnk_nombreOperador = Common.Env.Operador
            'Agrega tablas adionales para administrarlas
            Dim arrayTablasDetalle As New ArrayList()
            arrayTablasDetalle.Add("app_lista_entidad")
            MyBase.setTablasDetalle(arrayTablasDetalle)
            'Graba tracking
            Me.lnk_Tracking = True
        End Sub

#End Region

#Region "Métodos Públicos"

        'Retorna los registros relacionados para la tabla App_lista_entidad
        Public Function getEntidades(id_lista As String) As DataSet

            Dim ds As DataSet
            Dim sSelect, sFrom, sWhere, sOrder As String

            'Define la consulta
            sSelect = "id_entidad"
            sFrom = "App_lista_entidad"
            sWhere = "id_lista = " & StartFrame.SystemFunctions.Strings.StringToSql(id_lista)
            sOrder = " id_entidad"

            'Ejecuta la consulta
            ds = DA.Sql.Select(ConnectionString, sSelect, sFrom, sWhere, sOrder)
            ds.Tables(0).TableName = "App_lista_entidad"

            'Agrega un registro si la tabla está vacía
            Dim dr As DataRow
            With ds.Tables(0)
                If .Rows.Count = 0 Then
                    dr = .NewRow()
                    dr.Item("id_entidad") = ""
                    .Rows.Add(dr)
                End If
            End With
            dr = Nothing

            'Retorna la selección
            Return ds

        End Function

#End Region

#Region "Grabación"

        'Validaciones
        Private Sub Lista_Validando(ByRef cancela As Boolean, ByRef paramDataTable As System.Data.DataTable) Handles Me.Validando
            Dim row As DataRow
            'Recorre todos los registros de la tabla
            For Each row In paramDataTable.Rows
                If row.RowState <> DataRowState.Deleted Then
                    'Valida campo obligatorio
                    If IsDBNull(row("fecha_vigencia")) OrElse row("fecha_vigencia").ToString = String.Empty Then
                        row.SetColumnError("fecha_vigencia", "El campo Fecha de vigencia es obligatorio.")
                        cancela = True
                    End If
                End If
            Next
        End Sub

        'Grabación
        Public Overloads Overrides Function ActualizarDatos(ByRef paramDataSet As System.Data.DataSet) As Boolean

            'Instancia objetos de negocios con el operador logueado
            Dim _SubclaseDetalle As ListaEntidad = Nothing
            _SubclaseDetalle.setOperadorLogueado(Me.lnk_nombreOperador)

            Dim tran As OleDbTransaction = Nothing
            Try
                'Inicializa la conexión
                InicializarConexion()
                lnk_cn.Open()
                tran = lnk_cn.BeginTransaction

                'Grabación
                If Not paramDataSet.Tables(lnk_tablaPrincipal).GetChanges(DataRowState.Deleted) Is Nothing Then
                    'Si se esta eliminando la cabecera primero se borran los detalles
                    _SubclaseDetalle.ActualizarDatos(paramDataSet, lnk_cn, tran)
                    If Not paramDataSet.HasErrors Then
                        MyBase.ActualizarDatos(paramDataSet, lnk_cn, tran)
                    End If
                Else
                    'En altas y modificaciones, primero se graba en la tabla principal
                    MyBase.ActualizarDatos(paramDataSet, lnk_cn, tran)
                    If Not paramDataSet.HasErrors Then
                        _SubclaseDetalle.ActualizarDatos(paramDataSet, lnk_cn, tran)
                    End If
                End If

                'Cierra la transacción
                If paramDataSet.HasErrors Then
                    tran.Rollback()
                Else
                    tran.Commit()
                End If

            Catch ex As Exception
                'Revierte la transacción y reporta el error
                tran.Rollback()
                Throw ex

            Finally
                tran = Nothing
                lnk_cn.Close()
                lnk_cn = Nothing
                _SubclaseDetalle = Nothing
            End Try

        End Function

#End Region

    End Class

    Public Class ListaEntidad
        Inherits Abm

#Region "Constructor"

        ''' <summary>
        ''' Esta clase se encarga de la administración de los reportes o consultas contempladas por la aplicación.
        ''' </summary>
        ''' Constructor
        Sub New()
            MyBase.New(Operador, Password, "XRLista", "app_lista_entidad")
        End Sub

#End Region

    End Class

End Namespace
